<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // const p = new Promise((resolve, reject)=>{
  //   resolve("hello");
  // })

  // const x = p.then((res)=>{
  //   console.log(res);
  //   // return "hahaha"
  //   // return 123456
  //   // return {name:"admin"}
  //   return new Promise((a, b)=>{
  //     // a("1")
  //     b("2")
  //   });
  // })

  // console.log(x);
  // console.log(x === p);

  // x.then((res)=>{
  //   console.log(res)
  // })
  // x.catch((res)=>{
  //   console.log(res)
  // })

  // then方法的回调函数如果返回了一个非Promise实例，此时then的返回值是一个新的成功状态的Promise实例，成功的数据为then的回调函数返回的非Promise实例

  // then方法的回调函数如果返回了一个Promise实例，此时then的返回值就是这个新的Promise实例

  // =========

  // catch方法的回调函数如果返回了一个非Promise实例，此时catch的返回值是一个新的成功状态的Promise实例，成功的数据为catch的回调函数返回的非Promise实例
  // catch方法的回调函数如果返回了一个Promise实例，此时catch的返回值就是这个新的Promise实例


  // const p = new Promise((resolve, reject)=>{
  //   reject("hello");
  // })

  // const x = p.catch((res)=>{
  //   console.log(res);
  //   // return {name:"admin"}
  //   return new Promise((a, b)=>{
  //     a("heiehieh");
  //     b("error");
  //   })
  // });

  // console.log(x)

  // x.then((res)=>{
  //   console.log(res)
  // })

  


  // 以上特性，可以做到then的链式调用
  // 优化回调地狱

  // const p1 = new Promise((resolve, reject)=>{
  //   setTimeout(()=>{
  //     resolve("接口A成功了")
  //   }, Math.random() * 1000)
  // })

  // const p2 = p1.then((res)=>{
  //   console.log(res);
  //   return new Promise((resolve, reject)=>{
  //     setTimeout(()=>{
  //       resolve("接口B成功了")
  //     }, Math.random() * 1000)
  //   })
  // })

  // const p3 = p2.then(res=>{
  //   console.log(res);
  //   return new Promise((resolve, reject)=>{
  //     setTimeout(()=>{
  //       resolve("接口C成功了")
  //     }, Math.random() * 1000)
  //   })
  // })

  // p3.then(res=>{
  //   console.log(res)
  // })


  // new Promise((resolve, reject)=>{
  //   setTimeout(()=>{
  //     resolve("接口A成功了")
  //   }, Math.random() * 1000)
  // }).then((res)=>{
  //   console.log(res);
  //   return new Promise((resolve, reject)=>{
  //     setTimeout(()=>{
  //       resolve("接口B成功了")
  //     }, Math.random() * 1000)
  //   })
  // }).then(res=>{
  //   console.log(res);
  //   return new Promise((resolve, reject)=>{
  //     setTimeout(()=>{
  //       resolve("接口C成功了")
  //     }, Math.random() * 1000)
  //   })
  // }).then(res=>{
  //   console.log(res)
  // })

  

  // new Promise((resolve, reject)=>{
  //   setTimeout(()=>{
  //     resolve("接口A成功了")
  //   }, Math.random() * 1000)
  //   setTimeout(()=>{
  //     reject("接口A失败了")
  //   }, Math.random() * 1000)
  // }).then((res)=>{
  //   console.log(res);
  //   return new Promise((resolve, reject)=>{
  //     setTimeout(()=>{
  //       resolve("接口B成功了")
  //     }, Math.random() * 1000)
  //     setTimeout(()=>{
  //       reject("接口B失败了")
  //     }, Math.random() * 1000)
  //   })
  // }).then(res=>{
  //   console.log(res);
  //   return new Promise((resolve, reject)=>{
  //     setTimeout(()=>{
  //       resolve("接口C成功了")
  //     }, Math.random() * 1000)
  //     setTimeout(()=>{
  //       reject("接口C失败了")
  //     }, Math.random() * 1000)
  //   })
  // }).then(res=>{
  //   console.log(res)
  // }).catch(code=>{
  //   console.log(code);
  // })


  


  
</script>
</html>